package admin

import org.springframework.dao.DataIntegrityViolationException

class PortifolioController {

      static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

      def index() {
            redirect(action: "list", params: params)
      }

      def list() {
            params.max = Math.min(params.max ? params.int('max') : 10, 100)
            [portifolioInstanceList: Portifolio.list(params), portifolioInstanceTotal: Portifolio.count()]
      }

      def create() {
            [portifolioInstance: new Portifolio(params)]
      }

      def save() {
            def portifolioInstance = new Portifolio(params)
            if (!portifolioInstance.save(flush: true)) {
                  render(view: "create", model: [portifolioInstance: portifolioInstance])
                  return
            }
            
            def list = []
            if(params.imagem0.size > 5000000){
                  list.add("Imagem 1") 
            }
            if(params.imagem1.size > 5000000){
                  list.add("Imagem 2") 
            }
            if(params.imagem2.size > 5000000){
                  list.add("Imagem 3") 
            }
            if(params.imagem3.size > 5000000){
                  list.add("Imagem 4") 
            }
            if(params.imagem4.size > 5000000){
                  list.add("Imagem 5") 
            }
            if(params.imagem5.size > 5000000){
                  list.add("Imagem 6") 
            }
            if(params.imagem6.size > 5000000){
                  list.add("Imagem 7") 
            }
            if(params.imagem7.size > 5000000){
                  list.add("Imagem 8") 
            }
            if(params.imagem8.size > 5000000){
                  list.add("Imagem 9") 
            }
        
            if (list.isEmpty()){
                  for(i in 0..9) {
                        def fotoInstance = new BancoImagem()
                        fotoInstance.properties = params
                        def im = "imagem"+i          
                        def f = request.getFile(im)
                        fotoInstance.descricao = "nome"+i
                        fotoInstance.imagem = f.getBytes()
                        fotoInstance.portifolio =  portifolioInstance
                        if(fotoInstance.imagem != []){
                              fotoInstance.save(flush:true)                    
                        }
                  }
                  flash.message = "Todas as Fotos foram Salvas com Sucesso"
                  redirect(action: "show", id: portifolioInstance.id)
            }
            else{
                  flash.message = list + "Tamanho Não Permitido"
                  redirect (action:'create')
            }
      }

      def show() {
            def portifolioInstance = Portifolio.get(params.id)
            if (!portifolioInstance) {
                  flash.message = message(code: 'default.not.found.message', args: [message(code: 'portifolio.label', default: 'Portifolio'), params.id])
                  redirect(action: "list")
                  return
            }
            
            def listaImagem = BancoImagem.findAllWhere(portifolio: portifolioInstance)
            [portifolioInstance: portifolioInstance, listaImagem: listaImagem]
      }

      def edit() {
            def portifolioInstance = Portifolio.get(params.id)
            if (!portifolioInstance) {
                  flash.message = message(code: 'default.not.found.message', args: [message(code: 'portifolio.label', default: 'Portifolio'), params.id])
                  redirect(action: "list")
                  return
            }
            def listaImagem = BancoImagem.findAllWhere(portifolio: portifolioInstance)
            [portifolioInstance: portifolioInstance, listaImagem: listaImagem]
      }

      def update() {
            def portifolioInstance = Portifolio.get(params.id)
            if (!portifolioInstance) {
                  flash.message = message(code: 'default.not.found.message', args: [message(code: 'portifolio.label', default: 'Portifolio'), params.id])
                  redirect(action: "list")
                  return
            }

            if (params.version) {
                  def version = params.version.toLong()
                  if (portifolioInstance.version > version) {
                        portifolioInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
                              [message(code: 'portifolio.label', default: 'Portifolio')] as Object[],
                          "Another user has updated this Portifolio while you were editing")
                        render(view: "edit", model: [portifolioInstance: portifolioInstance])
                        return
                  }
            }

            
            if(params.imagemCapa.size > 0){
                  portifolioInstance.properties = params
                  def im = "imagemCapa"          
                  def f = request.getFile(im)
                  portifolioInstance.imagemCapa = f.getBytes()
            }
            else{
                  portifolioInstance.titulo = params.titulo
                  portifolioInstance.tipo = params.tipo
            }
            
            
            def list = []
            if(params.imagem0.size > 5000000){
                  list.add("Imagem 1") 
            }
            if(params.imagem1.size > 5000000){
                  list.add("Imagem 2") 
            }
            if(params.imagem2.size > 5000000){
                  list.add("Imagem 3") 
            }
            if(params.imagem3.size > 5000000){
                  list.add("Imagem 4") 
            }
            if(params.imagem4.size > 5000000){
                  list.add("Imagem 5") 
            }
            if(params.imagem5.size > 5000000){
                  list.add("Imagem 6") 
            }
            if(params.imagem6.size > 5000000){
                  list.add("Imagem 7") 
            }
            if(params.imagem7.size > 5000000){
                  list.add("Imagem 8") 
            }
            if(params.imagem8.size > 5000000){
                  list.add("Imagem 9") 
            }

            if (list.isEmpty()){
                  for(i in 0..9) {
                        def fotoInstance = new BancoImagem()
                        fotoInstance.properties = params
                        def im = "imagem"+i          
                        def f = request.getFile(im)
                        fotoInstance.descricao = "nome"+i
                        fotoInstance.imagem = f.getBytes()
                        fotoInstance.portifolio =  portifolioInstance
                        if(fotoInstance.imagem != []){
                              fotoInstance.save(flush:true)                    
                        }
                  }
            }
            else{
                  flash.message = list + "Tamanho Não Permitido"
                  redirect (action:'list')
            }
            
            
            if (!portifolioInstance.save(flush: true)) {
                  render(view: "edit", model: [portifolioInstance: portifolioInstance])
                  return
            }

            flash.message = message(code: 'default.updated.message', args: [message(code: 'portifolio.label', default: 'Portifolio'), portifolioInstance.id])
            redirect(action: "show", id: portifolioInstance.id)
      }

      def delete() {
            def portifolioInstance = Portifolio.get(params.id)
            if (!portifolioInstance) {
                  flash.message = message(code: 'default.not.found.message', args: [message(code: 'portifolio.label', default: 'Portifolio'), params.id])
                  redirect(action: "list")
                  return
            }

            try {
                  BancoImagem.removeAll(portifolioInstance)
                  portifolioInstance.delete(flush: true)
                  flash.message = message(code: 'default.deleted.message', args: [message(code: 'portifolio.label', default: 'Portifolio'), params.id])
                  redirect(action: "list")
            }
            catch (DataIntegrityViolationException e) {
                  flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'portifolio.label', default: 'Portifolio'), params.id])
                  redirect(action: "show", id: params.id)
            }
      }
      def view = {
            def imagem = Portifolio.get( params.id )
            if (imagem) {
                  response.setContentLength(imagem.imagemCapa.size())
                  response.setHeader('filename', imagem.titulo)
                  OutputStream out = response.outputStream
                  out.write(imagem.imagemCapa)
                  out.close()
            }
            else {
                  response.sendError(404)
            }
      }
      
      def imgPortifolio (){
            def imagem = BancoImagem.get( params.id )
            if (imagem) {
                  response.setContentLength(imagem.imagem.size())
                  response.setHeader('filename', imagem.descricao)
                  OutputStream out = response.outputStream
                  out.write(imagem.imagem)
                  out.close()
            }
            else {
                  response.sendError(404)
            }   
      }
      
      
      def apagarImg(){
            def imagem = BancoImagem.findById(params.id)
            def portifolioInstance = imagem.portifolio
            imagem.delete(flush:true)
            redirect(action: "edit", id:portifolioInstance.id)
      }
}
